package com.yaolifei.flower.web.util.extjs;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.nutz.mapl.Mapl;

/**
 * ExtJS 工具
 * 
 * @author yaolf
 * 
 */
public class ExtJS {
	
	public static final String TREE_NODE_ID_PROPERTY = "id";
	public static final String TREE_NODE_TEXT_PROPERTY = "text";
	public static final String TREE_NODE_LEAF_PROPERTY = "leaf";
	
	public static boolean isRootNode(String nodeId) {
		return "_root".equalsIgnoreCase(nodeId);
	}
	
//	/**
//	 * 构建Ext Grid所需要的数据
//	 * 
//	 * @param set
//	 * @return
//	 */
//	public static <T> Json buildGrid(Page<T> set) {
//		Json.toJson(obj)
//		JSONArray ja = new JSONArray(set.getEntrys());
//		JSONObject root = new JSONObject();
//		root.put("rows", ja);
//		root.put("total", set.getTotal());
//		return root;
//	}
//
//	/**
//	 * 
//	 * @param set
//	 * @param mapper
//	 * @return
//	 */
//	public static <T> JSONObject buildGrid(Page<T> set, PropertyMapper<T> mapper) {
//		PropertyFilter<T> filter = mapper.getFilter();
//
//		JSONArray ja = new JSONArray();
//		for (T t : set.getEntrys()) {
//			JSONObject jo = new JSONObject(t, filter);
//			mapper.map(jo, t);
//			ja.put(jo);
//		}
//
//		JSONObject root = new JSONObject();
//		root.put("rows", ja);
//		root.put("total", set.getTotal());
//		return root;
//	}
//
	public static <T> Object buildGrid(Collection<T> list) {
		return buildGrid(list, list.size());
	}

	public static <T> Object buildGrid(Collection<T> list, int total) {
		Map<String, Object> map = new HashMap<String, Object>();
		map.put("rows", list);
		map.put("total", total);
		return map;
	}

	public static <T> Object buildGrid(Collection<T> list, PropertyMapper<T> mapper) {
		List<Object> l = new ArrayList<Object>();
		for (T t : list) {
			Object o = Mapl.toMaplist(t);
			Map<String, Object> map = new HashMap<String, Object>();
			mapper.map(map, t);
			
			l.add(Mapl.merge(o, map));
		}
		return buildGrid(l);
	}
//
//	public static <T> JSONObject buildGrid(JSONArray rows) {
//		return buildGrid(rows, rows.length());
//	}
//	
//	public static <T> JSONObject buildGrid(JSONArray rows, int total) {
//		JSONObject root = new JSONObject();
//		root.put("rows", rows);
//		root.put("total", total);
//		return root;
//	}
//
	public static <T> Object buildTree(Collection<T> list, ExtJSTreeBuild<T> treeBuild) {
		List<Object> l = new ArrayList<Object>();
		for (T t : list) {
			Object o = Mapl.toMaplist(t);
			
			Map<String, Object> map = new HashMap<String, Object>();
			Object[] config = treeBuild.getTreeConfig(t);
			map.put(TREE_NODE_ID_PROPERTY, config[0]);
			map.put(TREE_NODE_TEXT_PROPERTY, config[1]);
			map.put(TREE_NODE_LEAF_PROPERTY, config[2]);
			treeBuild.map(map, t);
			
			l.add(Mapl.merge(o, map));
		}
		return l;
	}
//
//	public static JSONObject buildStatus(boolean success) {
//		return buildStatus(success, null);
//	}
//	
//	/**
//	 * 可以用于form提交和Ajax回执
//	 * 
//	 * @param success
//	 * @param msg
//	 * @return
//	 */
//	public static JSONObject buildStatus(boolean success, String msg) {
//		JSONObject jo = new JSONObject();
//		jo.put("success", success);
//		jo.put("msg", msg);
//		return jo;
//	}
//	
//	/**
//	 * 发送成功消息
//	 * @param msg
//	 * @return
//	 */
//	public static JSONObject ok() {
//		return buildStatus(true, null);
//	}
//	
//	public static JSONObject ok(String msg) {
//		return buildStatus(true, msg);
//	}
//	
//	/**
//	 * 发送失败消息
//	 * @param msg
//	 * @return
//	 */
//	public static JSONObject fail() {
//		return buildStatus(false, null);
//	}
//	
//	public static JSONObject fail(String msg) {
//		return buildStatus(false, msg);
//	}
	
}
